import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
@FunctionalInterface
interface NoParameterNoReturn{
    //只能有一个抽象方法
    void test();
//    //但是可以有静态和default
//    static void test1(){
//
//    }
//    default void test2(){
//
//    }
}

//无返回值一个参数
@FunctionalInterface
interface OneParameterNoReturn {
    void test(int a);
}

//无返回值多个参数
@FunctionalInterface
interface MoreParameterNoReturn {
    void test(int a,double b);
}

//有返回值无参数
@FunctionalInterface
interface NoParameterReturn{
    int test();
    public class test1 {

    }
}

//有返回值一个参数
@FunctionalInterface
interface OneParameterReturn {
    int test(int a);
}

//有返回值多参数
@FunctionalInterface
interface MoreParameterReturn {
    int test(int a,int b);
}

class Demo<T>{

}

public class test1{
//    public static void main(String[] args) {
//        NoParameterNoReturn noParameterNoReturn=new NoParameterNoReturn() {
//            @Override
//            public void test() {
//                System.out.println("hello");
//            }
//        };
//        noParameterNoReturn.test();
//    }

//    public static void main(String[] args) {
//        NoParameterNoReturn noParameterNoReturn=()-> System.out.println("hello");
//        noParameterNoReturn.test();
//        //参数的类型只有一个时可以省略，还可以省略参数的括号
//        OneParameterNoReturn oneParameterNoReturn=x-> System.out.println(x+10);
//        oneParameterNoReturn.test(19);
//        //类型不可以单独省略，除非一起省略
//        MoreParameterNoReturn moreParameterNoReturn=(x,y)-> System.out.println(x+y);
//        moreParameterNoReturn.test(10,20);
//
//    }

//    public static void main(String[] args) {
//        //可以省略return
//        NoParameterReturn noParameterReturn=()->10;
//        int ret=noParameterReturn.test();
//        System.out.println(ret);
//
//        OneParameterReturn oneParameterReturnx=x->+10;
//        ret=oneParameterReturnx.test(9);
//        System.out.println(ret);
//
//        MoreParameterReturn moreParameterReturn=(x,y)->x*y;
//        ret= moreParameterReturn.test(10,20);
//        System.out.println(ret);
//
//    }

//    public static void main(String[] args) {
//        int a=10;
//        NoParameterNoReturn noParameterNoReturn=new NoParameterNoReturn() {
//            @Override
//            public void test() {
//                //a=20;
//                System.out.println("hello->"+a);
//            }
//        };
//        noParameterNoReturn.test();
//
//        NoParameterNoReturn noParameterNoReturn1=()->{
//            //a=20;
//            System.out.println("hello"+a);
//        };
//        noParameterNoReturn.test();
//    }

//    public static void main(String[] args) {
//        List<String> list=new ArrayList<>();
//        list.add("hello");
//        list.add("world");
//        list.add("hehe");
////        list.forEach(new Consumer<String>() {
////            @Override
////            public void accept(String s) {
////                System.out.println(s);
////            }
////        });
//        list.forEach(s->System.out.println(s));
//        System.out.println("----------");
////        list.sort(new Comparator<String>() {
////            @Override
////            public int compare(String o1, String o2) {
////                return o1.compareTo(o2);
////            }
////        });
//        list.sort(((o1,o2)->{return o1.compareTo(o2);}));
//        list.forEach(s-> System.out.println(s));
//    }

//    public static void main(String[] args) {
//        Map<String,Integer> hashMap=new HashMap<>();
//        hashMap.put("hello",1);
//        hashMap.put("world",2);
//        hashMap.put("hehe",3);
//
////        hashMap.forEach(new BiConsumer<String, Integer>() {
////            @Override
////            public void accept(String s, Integer integer) {
////                System.out.println("key:"+s+" val:"+integer);
////            }
////        });
//
//        hashMap.forEach((String s,Integer integer)-> System.out.println("key: "+s+" val:"+integer));
//    }

    public static void main(String[] args) {
        //当中的数据类型不参与类型的组成，JVM中没有泛型的概念，泛型只存在于编译阶段
        Demo<String> demo=new Demo<>();
        System.out.println(demo);
        Demo<Integer> demo1=new Demo<>();
        System.out.println(demo1);
    }


}





